# devices/models.py
from django.db import models
from django.utils import timezone
import uuid

class Device(models.Model):
    """设备模型：包含设备基本信息和状态"""

    # 设备类型选项（固定可选值）
    DEVICE_TYPE_CHOICES = [
        ('sensor', '传感器'),
        ('controller', '控制器'),
        ('gateway', '网关'),
        ('camera', '摄像头'),
        ('other', '其他'),
    ]

    # 设备状态选项
    DEVICE_STATUS_CHOICES = [
        ('online', '在线'),
        ('offline', '离线'),
        ('error', '故障'),
        ('maintenance', '维护中'),
    ]

    # 核心字段
    id = models.UUIDField(
        primary_key=True,
        default=uuid.uuid4,
        verbose_name="设备ID",
        editable=False
    )

    name = models.CharField(
        max_length=100,
        verbose_name="设备名称"
    )
    type = models.CharField(
        max_length=20,
        choices=DEVICE_TYPE_CHOICES,
        verbose_name="设备类型"
    )
    status = models.CharField(
        max_length=20,
        choices=DEVICE_STATUS_CHOICES,
        default='offline',
        verbose_name="设备状态"
    )

    condition = models.BooleanField(
        default=False,  # False 表示关闭，True 表示开启
        verbose_name="设备开关"
    )

    location = models.CharField(
        max_length=200,
        verbose_name="安装位置",
        help_text="例如：生产车间A-3号区域"
    )

    # 网络相关字段
    ip_address = models.GenericIPAddressField(
        verbose_name="IP地址",
        null=True,
        blank=True  # 允许为空（部分设备可能无IP）
    )
    mac_address = models.CharField(
        max_length=50,
        verbose_name="MAC地址",
        null=True,
        blank=True
    )

    # 版本与时间字段
    firmware_version = models.CharField(
        max_length=50,
        verbose_name="固件版本",
        default="v1.0.0"
    )
    online_time = models.DateTimeField(
        verbose_name="首次上线时间",
        null=True,
        blank=True
    )
    last_active_time = models.DateTimeField(
        verbose_name="最后活动时间",
        null=True,
        blank=True
    )
    total_runtime = models.IntegerField(
        verbose_name="累计运行时间（小时）",
        default=0
    )

    # 描述与备注
    description = models.TextField(
        verbose_name="设备描述",
        null=True,
        blank=True
    )

    # 自动维护的时间字段（创建/更新时间）
    created_at = models.DateTimeField(
        auto_now_add=True,
        verbose_name="创建时间"
    )
    updated_at = models.DateTimeField(
        auto_now=True,
        verbose_name="更新时间"
    )

    class Meta:
        verbose_name = "设备"  # 单数显示名称
        verbose_name_plural = "设备"  # 复数显示名称
        ordering = ['id']  # 默认按设备ID排序
        indexes = [
            models.Index(fields=['status']),  # 为状态字段创建索引（优化查询）
            models.Index(fields=['type']),  # 为类型字段创建索引
        ]

    def __str__(self):
        """定义模型实例的字符串表示（在Admin中显示）"""
        return f"{self.name}（{self.id}）"

    def is_online(self):
        """判断设备是否在线（自定义方法）"""
        return self.status == 'online'

    is_online.short_description = "是否在线"  # 在Admin中显示的列名
    is_online.boolean = True  # 显示为图标（√/×）